package com.mac.web;

import com.alibaba.fastjson.JSON;
import com.mac.pojo.NewsAndEvents;
import com.mac.service.NewsAndEventsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

/**
 * 处理新闻与事件相关操作的Servlet。
 */
@WebServlet("/newsandeventsServlet/*")
public class NewsAndEventsServlet extends BaseServlet {
    // 使用SLF4J记录日志
    private static final Logger LOGGER = LoggerFactory.getLogger("NewsAndEventsServlet.Class");
    // 注入新闻与事件服务类，用于与新闻与事件数据交互
    NewsAndEventsService newsAndEventsService = new NewsAndEventsService();

    /**
     * 获取所有新闻与事件的方法。
     * @param request 请求对象，包含请求信息。
     * @param response 响应对象，用于返回响应数据。
     * @throws ServletException 如果发生Servlet异常。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectAllNewsAndEvents(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 初始化新闻与事件列表，用于存储所有新闻与事件数据
        ArrayList<NewsAndEvents> newsAndEvents;

        try {
            // 调用新闻与事件服务方法，获取所有新闻与事件
            newsAndEvents = newsAndEventsService.selectAllNewsAndEvents();
            LOGGER.info("newsAndEventsService.selectAllNewsAndEvents()-> succeed");

        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("newsAndEventsService.selectAllNewsAndEvents() -> failed", e);
            response.getWriter().write("SAR_ERROR");
            return;
        }

        // 将新闻与事件列表转换为JSON格式
        String jsonString = JSON.toJSONString(newsAndEvents);

        // 设置响应内容类型并写入JSON字符串
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

    /**
     * 根据事件ID获取单个新闻与事件的方法。
     * @param request 请求对象，包含请求信息。
     * @param response 响应对象，用于返回响应数据。
     * @throws ServletException 如果发生Servlet异常。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectOneByeventId(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 从请求参数中获取事件ID
        String Event_id = request.getParameter("event_id");

        // 将事件ID转换为整数
        int event_id = Integer.parseInt(Event_id);

        // 初始化新闻与事件对象，用于存储查询结果
        NewsAndEvents newsAndEvents;
        try {
            // 调用新闻与事件服务方法，根据ID查询单个新闻与事件
            newsAndEvents = newsAndEventsService.selectOneByeventId(event_id);
            LOGGER.info("newsAndEventsService.selectOneByeventId(event_id) -> succeed");
        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("newsAndEventsService.selectOneByeventId(event_id) -> failed", e);
            response.getWriter().write("SAR_ERROR");
            return;
        }

        // 将新闻与事件转换为JSON格式
        String jsonString = JSON.toJSONString(newsAndEvents);

        // 设置响应内容类型并写入JSON字符串
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }
}